/* 
 * File:   Cliente.h
 * Author: max
 *
 * Created on October 20, 2012, 9:05 AM
 */

#ifndef CLIENTE_H
#define	CLIENTE_H

#include <string>
#include <cstdlib>
#include <iostream>
#include <ostream>
#include "client_Conexion.h"
#include "common_Excepcion.h"
#include "client_IMensajero.h"
#include "client_IManejadorConexionEvento.h"

using namespace std;
using namespace TP;
using namespace TP::Comunicacion;
using namespace TP::Comunicacion::Eventos;

namespace TP { namespace Comunicacion { 

    class Cliente {
    
    public:
    
        Cliente(const string& pIp, const string& pPuerto, std::ostream& pOstream);

        virtual ~Cliente();

        void Iniciar() throw (Excepcion&);
        
        void Finalizar() throw (Excepcion&);
        
        void ejecutarComando (const string& pComando) throw (Excepcion&);
    
    private:

        void enviarMensaje (const string& pMensaje) throw (Excepcion&);
        
        void esperarRespuesta (string& pMensaje) throw (Excepcion&);
        
        string ip;
        string puerto;
        std::ostream& ostream;
        Conexion* conexion;
    };
}}

#endif	/* CLIENTE_H */

